/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ohyessoftware.sigc.infra.negocio;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author Diego
 * 01/06/2011
 */
@Entity
@Table(name = "produto", schema = "sigc")
public class Produto implements Serializable{
    private static final long serialVersionUID = 1L;

    //atributos
    /******************************************************************************/
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "cod_produto")
    private Long codProduto;
    @Column(name = "nome")
    private String nome;
    @Column(name = "descricao")
    private String descricao;
    @Column(name = "quantidade")
    private int quantidade;
    @Column(name = "preco_custo")
    private float precoCusto;
    @Column(name = "preco_varejo")
    private float precoVarejo;
    @Column(name = "preco_atacado")
    private float precoAtacado;
    @Column(name = "referencia")
    private String referencia;
    @Column(name = "icms") //Imposto sobre Circulação de Mercadorias e Serviços
    private float icms;
    @Column(name = "aliquota") //percentual ou valor fixo que será aplicado sobre a base de cálculo para o cálculo do valor de um tributo
    private float aliquota;
    @Column(name = "ipi") //Imposto sobre Produtos Industrializados (IPI)
    private float ipi;
    @Column(name = "base_calculo") //grandeza econômica sobre a qual se aplica a alíquota para calcular a quantia a pagar
    private float baseCalculo;
    @Column(name = "cst") //Código de Situação Tributária ou CST, este código determina a tributação (referente ao ICMS) do produto
    private float cst;

    //relacoes
    /******************************************************************************/
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "cod_marca", insertable = true, updatable = true)
    public Marca marca;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "cod_categoria", insertable = true, updatable = true)
    public Categoria categoria;

    @OneToMany(mappedBy = "produto", fetch = FetchType.LAZY)
    private List<Media> medias;

    @OneToMany(mappedBy = "produto", fetch = FetchType.LAZY)
    private List<VendaProduto> vendaProdutos;

    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="fornecedor_produto", schema="sigc",
    joinColumns=@JoinColumn(name="cod_produto"),
    inverseJoinColumns={@JoinColumn(name="cod_fornecedor")})
    private List<Fornecedor> fornecedores;

    //get e set
    /******************************************************************************/
    public Long getCodProduto() {
        return codProduto;
    }

    public void setCodProduto(Long codProduto) {
        this.codProduto = codProduto;
    }

    public float getAliquota() {
        return aliquota;
    }

    public void setAliquota(float aliquota) {
        this.aliquota = aliquota;
    }

    public float getBaseCalculo() {
        return baseCalculo;
    }

    public void setBaseCalculo(float baseCalculo) {
        this.baseCalculo = baseCalculo;
    }

    public Categoria getCategoria() {
        return categoria;
    }

    public void setCategoria(Categoria categoria) {
        this.categoria = categoria;
    }

    public float getCst() {
        return cst;
    }

    public void setCst(float cst) {
        this.cst = cst;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<Fornecedor> getFornecedores() {
        return fornecedores;
    }

    public void setFornecedores(List<Fornecedor> fornecedores) {
        this.fornecedores = fornecedores;
    }

    public float getIcms() {
        return icms;
    }

    public void setIcms(float icms) {
        this.icms = icms;
    }

    public float getIpi() {
        return ipi;
    }

    public void setIpi(float ipi) {
        this.ipi = ipi;
    }

    public Marca getMarca() {
        return marca;
    }

    public void setMarca(Marca marca) {
        this.marca = marca;
    }

    public List<Media> getMedias() {
        return medias;
    }

    public void setMedias(List<Media> medias) {
        this.medias = medias;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public float getPrecoAtacado() {
        return precoAtacado;
    }

    public void setPrecoAtacado(float precoAtacado) {
        this.precoAtacado = precoAtacado;
    }

    public float getPrecoCusto() {
        return precoCusto;
    }

    public void setPrecoCusto(float precoCusto) {
        this.precoCusto = precoCusto;
    }

    public float getPrecoVarejo() {
        return precoVarejo;
    }

    public void setPrecoVarejo(float precoVarejo) {
        this.precoVarejo = precoVarejo;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    public String getReferencia() {
        return referencia;
    }

    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }

    public List<VendaProduto> getVendaProdutos() {
        return vendaProdutos;
    }

    public void setVendaProdutos(List<VendaProduto> vendaProdutos) {
        this.vendaProdutos = vendaProdutos;
    }
    
}
